package com.suprNotes;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.*;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.graphics.Bitmap;
import android.provider.OpenableColumns;
import android.util.Config;
import android.util.Log;


//TODO aniadir el script de creación de la base de datos
//TODO probar a meter y sacar datos de la base de datos correctamente
//TODO ver que los metodos de busqueda funcionan
/**
 * Class baseDatos
 */
public class baseDatos {

  //
  // Fields
  //

  private SQLiteDatabase basedts;
  private static final String DATABASE_CREATE =
      "create table BIODATA(_id integer primary key autoincrement, "
          + "code text not null,"
          + "name text not null"
          +");";

  private static final String nombreDb = "PERSONALDB";

  private static final String DATABASE_TABLE = "BIODATA";

  private static final int DATABASE_VERSION = 1;
  
  //
  // Constructors
  //
  public baseDatos (Context cntext) {
	   	
	    	CursorFactory cursorFc = null;
			basedts = cntext.openOrCreateDatabase(nombreDb, SQLiteDatabase.OPEN_READWRITE, cursorFc);
		//	basedts.

  };
  

  /**
   * Set the value of basedts
   * @param newVar the new value of basedts
   */
  private void setBasedts ( SQLiteDatabase newVar ) {
    basedts = newVar;
  }

  /**
   * Get the value of basedts
   * @return the value of basedts
   */
  private SQLiteDatabase getBasedts ( ) {
    return basedts;
  }

  //
  // Other methods
  //

  /**
   * @return       elementoDibujo
   * @param        idnota
   */
  
  public ArrayList<elementoNota> buscaNotas(String entrada){
	  basedts=SQLiteDatabase.openDatabase(nombreDb, null,SQLiteDatabase.OPEN_READWRITE);
  	  Cursor cur =basedts.query("nota",null,entrada,null,null,null,null,null);
      ArrayList<elementoNota> notitas=new ArrayList<elementoNota>();
  	  elementoNota nota=null;
    	    while (cur.moveToNext()){
    	    	nota=new elementoNota();
    	    	nota.setIdNota(cur.getInt(1));
    	    	nota.setTitulo(cur.getString(2));
    	    	nota.setTextoNota(cur.getString(3));
    	    	notitas.add(nota);
    	  };
     	basedts.close(); 	  
    	  return notitas;
  }
  
  public elementoNota getNota( int idnota )
  {
	  basedts=SQLiteDatabase.openDatabase(nombreDb, null,SQLiteDatabase.OPEN_READWRITE);
  	  Cursor cur =basedts.query("nota",null,"id_nota="+String.valueOf(idnota),null,null,null,null,null);
  	elementoNota nota=null;
  	    if (cur.getCount()>0){
  	    	nota=new elementoNota();
  	    	nota.setIdNota(cur.getInt(1));
  	    	nota.setTitulo(cur.getString(2));
  	    	nota.setTextoNota(cur.getString(3));

  	  };
   	basedts.close(); 	  
  	  return nota;

  }
  public void setNota(elementoNota not){
	  
  }

  /**
   * @return       elementoDibujo
   * @param        idDibujo
   */
  public elementoDibujo getDibujo( int idDibujo )
  {
	  basedts=SQLiteDatabase.openDatabase(nombreDb, null,SQLiteDatabase.OPEN_READWRITE);
  	  Cursor cur =basedts.query("dibujo",null,"id_dibujo="+String.valueOf(idDibujo),null,null,null,null,null);
  	  elementoDibujo dib=null;
  	  if (cur.getCount()>0){
  		  dib=new elementoDibujo();
  		  dib.setIdDibujo(cur.getInt(0));
  		  dib.setIdNota(cur.getInt(1));
  		  dib.setTitulo(cur.getString(2));
  		  Bitmap bm = Bitmap.createBitmap(350, 450, android.graphics.Bitmap.Config.ALPHA_8);
  		  String dibujo=cur.getString(3);
  		  byte[] pixels=dibujo.getBytes();
		bm.setPixels(pasarAInt(pixels), 0, 350, 0, 0, 350, 450);
  		  dib.setMapaBits(bm);
  	  };
   	basedts.close(); 	  
  	  return dib;
  }
 
  public void setDibujo(elementoDibujo dibu){
	  
  }

  public int[] pasarAInt(byte[] pixels) {
	int[] salida = null;
	for(int i=0;i<pixels.length;i++){
		salida[i]=new Byte(pixels[i]).intValue();
	}
	return salida;
  }

/**
   * @return       elementoTabla
   * @param        idTabla
   */
  public elementoTabla getTabla( int idTabla )
  {
	  basedts=SQLiteDatabase.openDatabase(nombreDb, null,SQLiteDatabase.OPEN_READWRITE);
  	  Cursor cur =basedts.query("TABLA",null,"id_tabla="+String.valueOf(idTabla),null,null,null,null,null);
  	  elementoTabla tab=null;
  	  if (cur.getCount()>0){
  		  tab=new elementoTabla();
  		tab.setIdTabla(cur.getInt(0));
  		tab.setIdNota(cur.getInt(1));
		  tab.setTitulo(cur.getString(2));
  		tab.setZeldas(getZeldas(tab.getIdTabla()));
  	  };
  	basedts.close();
  	  return tab;

  }

  public void setTabla(elementoTabla tab){
	  
  }
  /**
   * @return       elementoLista
   * @param        idLista
   */
  public elementoLista getLista( int idLista )
  {
	  basedts=SQLiteDatabase.openDatabase(nombreDb, null,SQLiteDatabase.OPEN_READWRITE);
  	  Cursor cur =basedts.query("lista",null,"id_lista="+String.valueOf(idLista),null,null,null,null,null);
  	  elementoLista list=null;
  	  if (cur.getCount()>0){
  		  list=new elementoLista();
  		list.setIdLista(cur.getInt(0));
  		list.setIdNota(cur.getInt(1));
  		list.setTitulo(cur.getString(2));
  		list.setTuplasLista(getElemDeLista(list.getIdLista()));
  	  };
  	basedts.close();
  	  return list;
  }

  public void setLista(elementoLista list){
	  
  }
  /**
   * @return       elementoExtero
   * @param        idExterno
   */
  public elementoExtero getExterno( int idExterno )
  {
	  basedts=SQLiteDatabase.openDatabase(nombreDb, null,SQLiteDatabase.OPEN_READWRITE);
  	  Cursor cur =basedts.query("externo",null,"id_externo="+String.valueOf(idExterno),null,null,null,null,null);
  	elementoExtero ext=null;
  	  if (cur.getCount()>0){
  		ext=new elementoExtero();
  		ext.setIdExterno(cur.getInt(0));
  		ext.setIdNota(cur.getInt(1));
  		ext.setTitulo(cur.getString(2));
  		ext.setPrograma(cur.getString(3));
  		ext.setComandoEjec(cur.getString(4));
  		ext.setDatosPropios(cur.getString(5));
  	  };
  	basedts.close();
  	  return ext;	  
  }


  public void setExterno(elementoExtero extt){
	  
  }
  /**
   * @return       Array<elementoNota>
   * @param        aBuscar
   * @param        max
   */
  public ArrayList<elementoNota> buscarNotas( String aBuscar, int max )
  {
	  basedts=SQLiteDatabase.openDatabase(nombreDb, null,SQLiteDatabase.OPEN_READWRITE);
  	  Cursor cur =basedts.query("nota",null,null,null,null,null,null);
  	  //TODO ver como buscar el like
  	ArrayList<elementoNota> lista=new ArrayList<elementoNota>();
  	elementoNota list=null;
  	  if (cur.getCount()>0){
  		do{
  		list=new elementoNota();
  		list.setIdNota(cur.getInt(0));
  		list.setTitulo(cur.getString(1));
  		list.setTextoNota(cur.getString(2));
  		lista.add(list);
  		}while (cur.moveToNext());
  	  };
  	basedts.close();
  	//lista de notas dude!
  	  return lista;
  }


  /**
   * @return       Array<elementoZelda>
   */
  public ArrayList<elementoZelda> getZeldas(int idTabla  )
  {
	  basedts=SQLiteDatabase.openDatabase(nombreDb, null,SQLiteDatabase.OPEN_READWRITE);
  	  Cursor cur =basedts.query("zelda",null,"id_tabla="+String.valueOf(idTabla),null,null,null,null);
  	  //TODO ver como buscar el like
  	ArrayList<elementoZelda> lista=new ArrayList<elementoZelda>();
  	elementoZelda list=null;
  	  
  	  if (cur.getCount()>0){
  		do{
  		 list=new elementoZelda();
  		list.setIdZelda(cur.getInt(0));
  		list.setIdtabla(cur.getInt(1));
  		list.setFila(cur.getInt(2));
  		list.setColumna(cur.getInt(3));
  		list.setContenido(cur.getString(4));
  		lista.add(list);
  		}while(cur.moveToNext());
  	  };
  	basedts.close();
  	//lista de notas dude!
  	  return lista;
  }

  /**
   * @return       Array<elementoZelda>
   */
  public ArrayList<elementoDeLista> getElemDeLista(int idLista  )
  {
	  basedts=SQLiteDatabase.openDatabase(nombreDb, null,SQLiteDatabase.OPEN_READWRITE);
  	  Cursor cur =basedts.query("elemtabla",null,"id_lista="+String.valueOf(idLista),null,null,null,null);
  	  //TODO ver como buscar el like
  	ArrayList<elementoDeLista> lista=new ArrayList<elementoDeLista>();
  	elementoDeLista list=null;
  	  
  	  if (cur.getCount()>0){
  		do{
  		  list=new elementoDeLista();
  		list.setIdElementoLista(cur.getInt(0));
  		list.setIdLista(cur.getInt(1));
  		list.setPadre(cur.getInt(2));
  		list.setContenido(cur.getString(3));
  		lista.add(list);
  		}while(cur.moveToNext());
  	  };
  	basedts.close();
  	//lista de notas dude!
  	  return lista;

  
  }
}
